<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    /* 
    1. let / const / 块作用域    
    2. 解构赋值: 解构对象或数组
    3. 数值扩展: bigint
    4. 字符串扩展: 模板字符串 / includes
    5. 函数扩展: 箭头函数 / 形参默认值 / rest(剩余)参数
    6. 对象扩展: 属性和方法简写, 扩展对象
    7. 数组扩展: 扩展数组 / find() / findIndex() / Array.from() 

    9. 新容器: Map和Set
    10. 类语法: class / static / constructor / super / extends
    11. 新的异步语法: Promise / aysnc与await
    12. 模块化: export / default / import
    */

    /* 12. 模块化: export / default / import */
    /* 
     a.js
        export 
        export default

    */

    /* 10. 类语法: class / static / constructor / super / extends */
    // class Person {
    //   constructor (name, age) {
    //     this.name = name
    //     this.age = age
    //   }

    //   sayInfo () {
    //     console.log(this.name, this.age)
    //   }
    // }

    // // const p = new Person('A', 21)
    // // p.sayInfo()
    // // console.log(typeof Person) // 'function'
    // // console.log(p)

    // class Student extends Person {
    //   static xxx = 3
    //   yyy = 4
    //   zzz = () => {

    //   }
    //   constructor (name, age, price) {
    //     super(name, age)
    //     this.price = price
    //   }

    //   sayInfo () {
    //     console.log(this.name, this.age, this.price)
    //   }
    // }

    // const s = new Student('B', 23, 14000)
    // s.sayInfo()
    // console.log(Student.xxx)
    // console.log(s, s.yyy)

    



    /* 9. 新容器: Map和Set */
    // // map相对于对象的优势是: 标识key可以是任意类型, 对象的标识key只能是string
    // const map = new Map()
    // const fn = () => {}
    // map.set({}, 123)
    // map.set(fn, 'abc')
    // console.log(map)
    // console.log(map.get(fn))
    // // set中的Value是不重复的
    // const arr = [1, 3, 5, 3, 6, 5]
    // const arr2 = [...new Set(arr)]
    // const arr3 = Array.from(new Set(arr))
    // console.log(arr2, arr3)




    /* 1. let / const / 块作用域    */
    // let a = 2
    // const b = 3

    /* 2. 解构赋值 */
    // const {m, a:a1, c='abc'} = {m: 1, a: 2}
    // console.log(m, a1, c)
    // const [i, j] = [3, 4]
    // console.log(i, j)

    /* 3. 数值扩展: bigint */
    // let max = Number.MAX_SAFE_INTEGER
    // console.log(max)
    // console.log(max + 1)
    // console.log(max + 2)

    // let bMax = BigInt(max)
    // console.log(bMax, typeof bMax)
    // console.log(bMax + 1n)
    // console.log(bMax + 2n)
    // console.log(bMax + 3n)

    /* 4. 字符串扩展: 模板字符串 / includes */
    // const name = 'tom'
    // const age = 12
    // const str = `我叫 ${name}, 今年 ${age}!`
    // console.log(str.includes('今年')) // true
    // console.log(str.includes('今年!')) // false

    /* 5. 函数扩展: 箭头函数 / 形参默认值 / rest(剩余)参数 */
    // const fn = a => a + 1
    // console.log(fn(2))
    // setTimeout(() => {
    //   // console.log(this)
    // }, 100);
    // [].forEach((item , index) => {

    // })
    // // new fn()

    // const fn2 = (...args) => {
    //   // console.log(arguments)
    //   console.log(args)
    // }
    // fn2(1, 3, 5)
    // const fn3 = (a='aaa') => {
    //   console.log(a)
    // }
    // fn3()

    /* 6. 对象扩展: 属性和方法简写, 扩展对象 */
    // const a = 3
    // const obj = {
    //   // a: a,
    //   // fn: function () {
        
    //   // }
    //   a,
    //   b: {
    //     m: 2
    //   },
    //   fn () {}
    // }

    // const obj2 = {...obj}  // 对obj进行了浅拷贝
    // const obj3 = {m: 5}
    // const obj4 = {...obj1, ...obj3} // 合并多个对象

    /* 7. 数组扩展: 扩展数组 / find() / findIndex() / Array.from()  */
    // const arr1 = [1, 3, 6, 2, 8]
    // const arr2 = [4, 5]
    // const arr3 = [...arr1]
    // const arr4 = [...arr1, ...arr2]
    // console.log(arr1.find((item, index) => item>4))
    // console.log(arr1.findIndex((item, index) => item>4))




  </script>
</body>
</html>